home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / lib / python2.6 / hotshot / log.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2009-11-11  |  6KB  |  184 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import _hotshot
  5. import os.path as os
  6. import parser
  7. import symbol
  8. from _hotshot import WHAT_ENTER, WHAT_EXIT, WHAT_LINENO, WHAT_DEFINE_FILE, WHAT_DEFINE_FUNC, WHAT_ADD_INFO
  9. __all__ = [
  10.     'LogReader',
  11.     'ENTER',
  12.     'EXIT',
  13.     'LINE']
  14. ENTER = WHAT_ENTER
  15. EXIT = WHAT_EXIT
  16. LINE = WHAT_LINENO
  17.  
  18. class LogReader:
  19.     
  20.     def __init__(self, logfn):
  21.         self._filemap = { }
  22.         self._funcmap = { }
  23.         self._reader = _hotshot.logreader(logfn)
  24.         self._nextitem = self._reader.next
  25.         self._info = self._reader.info
  26.         if self._info.has_key('current-directory'):
  27.             self.cwd = self._info['current-directory']
  28.         else:
  29.             self.cwd = None
  30.         self._stack = []
  31.         self._append = self._stack.append
  32.         self._pop = self._stack.pop
  33.  
  34.     
  35.     def close(self):
  36.         self._reader.close()
  37.  
  38.     
  39.     def fileno(self):
  40.         """Return the file descriptor of the log reader's log file."""
  41.         return self._reader.fileno()
  42.  
  43.     
  44.     def addinfo(self, key, value):
  45.         '''This method is called for each additional ADD_INFO record.
  46.  
  47.         This can be overridden by applications that want to receive
  48.         these events.  The default implementation does not need to be
  49.         called by alternate implementations.
  50.  
  51.         The initial set of ADD_INFO records do not pass through this
  52.         mechanism; this is only needed to receive notification when
  53.         new values are added.  Subclasses can inspect self._info after
  54.         calling LogReader.__init__().
  55.         '''
  56.         pass
  57.  
  58.     
  59.     def get_filename(self, fileno):
  60.         
  61.         try:
  62.             return self._filemap[fileno]
  63.         except KeyError:
  64.             raise ValueError, 'unknown fileno'
  65.  
  66.  
  67.     
  68.     def get_filenames(self):
  69.         return self._filemap.values()
  70.  
  71.     
  72.     def get_fileno(self, filename):
  73.         filename = os.path.normcase(os.path.normpath(filename))
  74.         for fileno, name in self._filemap.items():
  75.             if name == filename:
  76.                 return fileno
  77.         
  78.         raise ValueError, 'unknown filename'
  79.  
  80.     
  81.     def get_funcname(self, fileno, lineno):
  82.         
  83.         try:
  84.             return self._funcmap[(fileno, lineno)]
  85.         except KeyError:
  86.             raise ValueError, 'unknown function location'
  87.  
  88.  
  89.     
  90.     def next(self, index = 0):
  91.         while None:
  92.             (what, tdelta, fileno, lineno) = self._nextitem()
  93.             if what == WHAT_ENTER:
  94.                 (filename, funcname) = self._decode_location(fileno, lineno)
  95.                 t = (filename, lineno, funcname)
  96.                 self._append(t)
  97.                 return (what, t, tdelta)
  98.             None if what == WHAT_EXIT else what == WHAT_ENTER
  99.             if what == WHAT_ADD_INFO:
  100.                 if tdelta == 'current-directory':
  101.                     self.cwd = lineno
  102.                 
  103.                 self.addinfo(tdelta, lineno)
  104.                 continue
  105.             raise ValueError, 'unknown event type'
  106.             continue
  107.             return None
  108.  
  109.     
  110.     def __iter__(self):
  111.         return self
  112.  
  113.     
  114.     def _decode_location(self, fileno, lineno):
  115.         
  116.         try:
  117.             return self._funcmap[(fileno, lineno)]
  118.         except KeyError:
  119.             if self._loadfile(fileno):
  120.                 filename = None
  121.                 funcname = None
  122.             
  123.             
  124.             try:
  125.                 (filename, funcname) = self._funcmap[(fileno, lineno)]
  126.             except KeyError:
  127.                 filename = self._filemap.get(fileno)
  128.                 funcname = None
  129.                 self._funcmap[(fileno, lineno)] = (filename, funcname)
  130.             except:
  131.                 None<EXCEPTION MATCH>KeyError
  132.             
  133.  
  134.             None<EXCEPTION MATCH>KeyError
  135.  
  136.         return (filename, funcname)
  137.  
  138.     
  139.     def _loadfile(self, fileno):
  140.         
  141.         try:
  142.             filename = self._filemap[fileno]
  143.         except KeyError:
  144.             print 'Could not identify fileId', fileno
  145.             return 1
  146.  
  147.         if filename is None:
  148.             return 1
  149.         absname = os.path.normcase(os.path.join(self.cwd, filename))
  150.         
  151.         try:
  152.             fp = open(absname)
  153.         except IOError:
  154.             filename is None
  155.             filename is None
  156.             return None
  157.  
  158.         st = parser.suite(fp.read())
  159.         fp.close()
  160.         funcdef = symbol.funcdef
  161.         lambdef = symbol.lambdef
  162.         stack = [
  163.             st.totuple(1)]
  164.         while stack:
  165.             tree = stack.pop()
  166.             
  167.             try:
  168.                 sym = tree[0]
  169.             except (IndexError, TypeError):
  170.                 filename is None
  171.                 filename is None
  172.                 continue
  173.             except:
  174.                 filename is None
  175.  
  176.             if sym == funcdef:
  177.                 self._funcmap[(fileno, tree[2][2])] = (filename, tree[2][1])
  178.             elif sym == lambdef:
  179.                 self._funcmap[(fileno, tree[1][2])] = (filename, '<lambda>')
  180.             
  181.             stack.extend(list(tree[1:]))
  182.  
  183.  
  184.